/**
 * Copyright(c) 2013 Jade Techonologies Co., Ltd.
 *
 * History:
 *   13-5-4 下午3:21 Created by dwzhang
 */
package com.jade.framework.base.criterion.sql;

import com.jade.framework.base.criterion.Constants;
import com.jade.framework.base.criterion.CriterionInterpreter;
import com.jade.framework.base.criterion.expression.ReverseInExpression;

/**
 * 反转IN的解析器。
 *
 * @author dwzhang
 * @version 1.0 13-5-4 下午3:21
 */
public class ReverseInInterpreter implements CriterionInterpreter<SqlContext, ReverseInExpression>
{
    public ReverseInInterpreter()
    {
    }

    /**
     * 对表达式进行解析，形成可以用于实际查询的上下文。
     *
     * @param context    解析上下文。
     * @param expression IN表达式。
     */
    public void interprete(SqlContext context, ReverseInExpression expression)
    {
        context.addPrepraredValue(expression.getValue());
        context.append(Constants.BLANK);
        context.append(Constants.INTERROGATION_POINT);
        context.append(Constants.BLANK);
        if (expression.isNot()) {
            context.append(Constants.NOT);
            context.append(Constants.BLANK);
        }
        context.append("MEMBER");
        context.append(Constants.BLANK);
        context.append(expression.getFullName());
    }
}

